1. Field of the Invention
This invention relates generally to computer I/O subsystems having peripheral bus segments, and more particularly to a device and method for resetting bus segments in I/O subsystems that are segmented with expanders.
2. Description of the Related Art
Modern computer systems often utilize one or more buses to connect to peripheral devices to enhance its resources. For example, the resources of a computer system may be substantially increased by connecting the computer system to one or more peripheral devices such as disk drives, tape drives, printers, scanners, optical drives, and the like. These peripheral devices are attached to the computer system by means of a peripheral bus (e.g., cable).
One of the most widely used peripheral buses is the well known small computer systems interface (SCSI) bus, which is defined in conformity with well known SCSI protocols (e.g., SCSI-1, SCSI-2, SCSI-3, etc.), which are incorporated herein by reference. The SCSI protocols are designed to provide an efficient peer-to-peer I/O interface between a host computer and its peripheral devices in a computer system.
FIG. 1 shows a block diagram of a conventional computer system 100 including a host computer 102, a plurality of SCSI devices 106, and an SCSI bus 108. The host computer 102 includes an SCSI host adapter 104 for communicating with the SCSI devices 106. The host adapter 104 in the computer system 100 controls communication between the host computer 102 and the SCSI devices 106. For example, the host adapter 104 provides a physical connection between the host computer 102 and the SCSI bus 108. In addition, it is configured to receive data, address, and control signals from the host computer 102 and convert the signals into corresponding SCSI compatible data, address, and control signals. Conversely, the SCSI host adapter 104 is also configured to receive SCSI compatible data, address, and control signals from the SCSI devices 106 through the SCSI bus 108 and convert them into corresponding host-bus compatible data, addressing, and control signals. The SCSI host adapter 104 is well known in the art and may be implemented, for example, by using AIC-7890A™ packaged semiconductor device, which is available from Adaptec Inc., of Milpitas, Calif.
Under the conventional SCSI specifications, the SCSI bus 108 may connect up to 16 SCSI devices including the host adapter 104 depending on the type of SCSI bus implemented. The SCSI devices 106 may be peripheral devices such as disk drives, tape drives, printers, scanners, optical drives, or any other devices that meet the SCSI specification. The SCSI bus 108 is typically implemented as a cable having a set of parallel wires. For example, the SCSI-1 cable has 50 wires. Of these 50 wires, eight wires are for data, one wire is for parity, nine wires are for control, 25 wires are for ground, and the remaining wires are for power or are reserved for future use. The eight data wires are used to carry eight bits of data in parallel. In general, conventional SCSI bus cables include either 8 or 16 data wires for carrying 8 or 16 bits, respectively, of data in parallel. The data wires in the bus thus define a datapath for communicating bits equal to the number of data wires in the bus.
A traditional SCSI bus may accommodate a plurality of SCSI devices up to a maximum number equal to the number of data bits in the SCSI bus. In practice, the width of the SCSI datapath is typically 8 or 16 bits corresponding to the number of data wires in the SCSI bus. This means the maximum number of SCSI devices, including a host adapter, that can be attached to an SCSI bus is limited to 8 or 16.
Conventional SCSI buses, however, are generally capable of transmitting signals reliably for a specified cable length only. For example, SCSI bus cables conforming to SCSI specifications are typically limited to a maximum length such as 3, 6, 12, or 25 meters, and the like. In modern computer systems such as servers that need to communicate with numerous SCSI devices, some SCSI peripheral devices may be located more than the specified cable length away from a host computer.
In such instances, an expander, which is essentially a repeater, is typically used to add another SCSI bus, which is then used to couple additional SCSI devices. FIG. 2 illustrates a conventional I/O subsystem 200 that includes an expander 214 for connecting a pair of SCSI bus segments 208 and 210. In the I/O subsystem 200, a host computer 202 is coupled to the SCSI bus segment 208 via an SCSI host adapter 204. One or more SCSI devices 206 are coupled to the SCSI bus segment 208. Additionally, one or more SCSI devices 212 and a host computer 216 are coupled to the SCSI bus segment 210 and the host computer 202 also includes an SCSI adapter for communicating with the SCSI bus segment 210. The expander 214 is coupled between the SCSI bus segments 208 and 210 to regenerate signals received on either SCSI bus segments 208 or 210 for transmission to the other SCSI bus segment. By so repeating signals, the expander 214 functions to extend the length of the overall SCSI bus so that additional SCSI devices 212, host computer 216, or other expanders can be attached to the SCSI bus segment 210.
During the operation of the I/O subsystem, however, an SCSI device may not function properly and hang the SCSI bus. For example, the SCSI device 206A may malfunction while accessing the bus segment 210 and continue to assert BSY signal on the bus segment 210. Because the expander 214 repeats the BSY signal onto the other bus segment 208, the SCSI device 206A hangs the entire I/O subsystem, thus preventing other devices from accessing the bus segments.
When the SCSI bus is hung, the conventional SCSI protocols typically provide a reset signal RST to reset the bus devices. For example, the host computer 202 may issue a RST signal over SCSI bus segment 208 to the devices 206A and 206B. In this case, however, the expander also causes the RST signal to propagate to all devices 212A and 212B in the I/O subsystem 200 and cause those devices to reset due to the repeating function of the expander 214. Thus, all devices and expanders in the I/O subsystem will be reset.
Resetting of all devices and expanders is undesirable because the devices may have queued commands for execution. Upon reset, these queued commands will be lost. This is particularly undesirable if there are multiple initiators. In addition, when an I/O subsystem is segmented with many expanders with substantial number of devices, resetting all devices to clear the hang condition caused by a single malfunctioning device may entail substantial time and loss of system resources.
In view of the foregoing, what is needed is an expander device and method for resetting individual bus segments in an I/O subsystem one segment at a time to clear a hang condition without resetting all devices in the I/O subsystem.